package vista;

import java.net.URL;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.swing.JOptionPane;

import controlador.CdPatente;
import controlador.CdProveedores;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import entidades.Patente;
import entidades.Proveedor;
import entidades.iOperaciones;

public class ClCtrPatente implements Initializable, iOperaciones {
	
	
	@FXML
	TextField txtCodigoPatente;
	@FXML
	TextField txtNombrePatente;
	@FXML
	TextField txtExistenciaPatente;
	@FXML
	TextField txtPrecioPatente;
	@FXML
	TextField txtDescuento;
	@FXML
	TextField txtlaboratorio;
	@FXML
	TextField txtformula;
	@FXML
	TextField txtPrecioP;
	@FXML
	Button btnGuardarPatente;
	@FXML
	Button btnEliminarPatente;
	

	
	@FXML
	TableView <Object>tvPatente;
	@FXML
	TableColumn tcCodigoPatente;
	@FXML
	TableColumn tcNombrePatente;
	@FXML
	TableColumn tcExistenciaPatente;
	@FXML
	TableColumn tcPrecioPatente;
	@FXML
	TableColumn tcDescuento;
	@FXML
	TableColumn tcLaboratorio;
	@FXML
	TableColumn tcFormula;
	@FXML
	TableColumn tcPrecioP;
	@FXML
	TableColumn tcProveedor;
	@FXML
	ComboBox cmbProveedor;
	
	@FXML
	TabPane tpProductos;
	@FXML 
	Tab tabMedicamentosPate;
	@FXML 
	Tab tabMedicamentosGene;
	

	
	
	
	
	
	
	
	
	
	
	private vista.MainApp mainApp;
	private boolean esnuevo=true;
	private Patente patente;
	private CdPatente datosPatente=new CdPatente();
	List<Object>lista=new ArrayList<Object>();
	private CdProveedores datosProveedor = new CdProveedores();
	List<Object>listaProveedores=new ArrayList<Object>();
	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		// TODO Auto-generated method stub
		llenarTvProductos();
		llenarCombo();
		btnGuardarPatente.setOnAction(new btnGuardarPatente_Click());
		btnEliminarPatente.setOnAction(new btnEliminarProductos_Click());
		tvPatente.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>(){

			@Override
			public void changed(ObservableValue<? extends Object> observable,
					Object oldValue, Object newValue) {
				// TODO Auto-generated method stub
				datosPatente(newValue);
				
			}
			
		});
	}
	
	private void datosPatente(Object seleccionado){
		patente=(Patente) seleccionado;
		if(patente!=null){
		esnuevo=false;
		txtCodigoPatente.setText(patente.getCodigoPate());
		txtNombrePatente.setText(patente.getNombre());
		txtExistenciaPatente.setText(Integer.toString(patente.getExistencias()));
		txtPrecioPatente.setText(Float.toString(patente.getPreciof()));
		txtDescuento.setText(patente.getDescuento());
		txtlaboratorio.setText(patente.getLaboratorio());
		txtformula.setText(patente.getFormula());
		txtPrecioP.setText(Float.toString(patente.getPreciop()));
		cmbProveedor.setValue((Proveedor)patente.getProveedor());
	
	
		
		}
		
	}
	
	
	
	public void llenarCombo(){
		try {
			listaProveedores=datosProveedor.listar();
		} catch (ClassNotFoundException | InstantiationException
				| IllegalAccessException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		ObservableList<Object>listaObs=FXCollections.observableArrayList(listaProveedores);
		cmbProveedor.getItems().addAll(listaObs);
		
		
	}
	
	

	
	public void limpiarCajasPatente(){
		esnuevo=true;
		txtCodigoPatente.setText("");
		txtNombrePatente.setText("");
		txtExistenciaPatente.setText("");
		txtPrecioPatente.setText("");
		txtDescuento.setText("");
		txtlaboratorio.setText("");
		txtformula.setText("");
		txtPrecioP.setText("");
		
	}
	public void llenarTvProductos(){
		
		try {
			lista=listar();
		} catch (ClassNotFoundException | InstantiationException
				| IllegalAccessException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		ObservableList<Object>listaObs=FXCollections.observableArrayList(lista);
		tcCodigoPatente.setCellValueFactory(new PropertyValueFactory<Patente,Integer>("codigoPate"));
		tcNombrePatente.setCellValueFactory(new PropertyValueFactory<Patente,String>("nombre"));
		tcExistenciaPatente.setCellValueFactory(new PropertyValueFactory<Patente,Integer>("existencias"));
		tcPrecioPatente.setCellValueFactory(new PropertyValueFactory<Patente,Float>("preciof"));
		tcDescuento.setCellValueFactory(new PropertyValueFactory<Patente,String>("descuento"));
		tcLaboratorio.setCellValueFactory(new PropertyValueFactory<Patente,String>("laboratorio"));
		tcFormula.setCellValueFactory(new PropertyValueFactory<Patente,String>("formula"));
		tcPrecioP.setCellValueFactory(new PropertyValueFactory<Patente,Float>("preciop"));
		tcProveedor.setCellValueFactory(new PropertyValueFactory<Patente,Proveedor>("proveedor"));
		
		tvPatente.setItems(listaObs);
	}
	
	private class btnGuardarPatente_Click implements EventHandler<ActionEvent>
	{
			@Override
		public void handle(ActionEvent arg0) {
				

				if(esnuevo==true){
					
					patente=new Patente(txtCodigoPatente.getText(),txtNombrePatente.getText(),(Integer.parseInt(txtExistenciaPatente.getText())),(Float.parseFloat(txtPrecioPatente.getText())),txtDescuento.getText(),txtlaboratorio.getText(),txtformula.getText(),(Float.parseFloat(txtPrecioP.getText())),(Proveedor)cmbProveedor.getValue());
					try{
						
						if(agregar(patente)){
							JOptionPane.showMessageDialog(null, "registro existoso");
							
							llenarTvProductos();
							limpiarCajasPatente();
							
						}
						else{
							System.out.println("registro fallido");
						}	
						
					}
					catch(Exception e){
						System.out.print(e);
						esnuevo=false;
					}
					
				}
				else{
					patente.setCodigoPate(txtCodigoPatente.getText());
					patente.setNombre(txtNombrePatente.getText());
					patente.setExistencias(Integer.parseInt(txtExistenciaPatente.getText()));
					patente.setPreciof(Float.parseFloat(txtPrecioPatente.getText()));
					patente.setDescuento(txtDescuento.getText());
					patente.setLaboratorio(txtlaboratorio.getText());
					patente.setFormula(txtformula.getText());
					patente.setPreciop(Float.parseFloat(txtPrecioP.getText()));
					patente.setProveedor((Proveedor)cmbProveedor.getValue());
					
					
					try{
						
						if(actualizar(patente)){
							System.out.println("Modificacion exitosa");
							llenarTvProductos();
							limpiarCajasPatente();
						}
						else{
							System.out.println("Modificacion fallida");
						}	
						
					}
					catch(Exception e){
						System.out.print(e);
						esnuevo=false;
					}
				}
			}
			
	
	}
	private class btnEliminarProductos_Click implements EventHandler<ActionEvent>{

		@Override
		public void handle(ActionEvent arg0) {
			// TODO Auto-generated method stub
				
			
			
			
			patente.setCodigoPate(txtCodigoPatente.getText());
			patente.setNombre(txtNombrePatente.getText());
			patente.setExistencias(Integer.parseInt(txtExistenciaPatente.getText()));
			patente.setPreciof(Integer.parseInt(txtPrecioPatente.getText()));
			patente.setDescuento(txtDescuento.getText());
			patente.setLaboratorio(txtlaboratorio.getText());
			patente.setFormula(txtformula.getText());
			
			
			
			
			try{
				
				if(eliminar(patente)){
					System.out.println("cliente eliminado exitosamente");
					llenarTvProductos();
					limpiarCajasPatente();
				}
				else{
					System.out.println("operacin  fallida");
				}	
				
			}
			catch(Exception e){
				System.out.print(e);
				esnuevo=false;
			}	
		}
			
		}
	public void setMainApp(vista.MainApp mainApp){
		this.mainApp=mainApp;
	}

	@Override
	public boolean agregar(Object nuevo) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosPatente.agregar(nuevo);
	}

	@Override
	public boolean actualizar(Object modificado) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosPatente.actualizar(modificado);
		//return false;
	}

	@Override
	public boolean eliminar(Object eliminado) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosPatente.eliminar(eliminado);
	}

	@Override
	public List<Object> listar() throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosPatente.listar();
	}

}


